/*!
 * @file moduleKeyboard.hh
 * @brief Moduł do obsługi klawiatury
 */

#ifndef  __ENGINE_KEY_MODULEKEYBOARD_HH
#define  __ENGINE_KEY_MODULEKEYBOARD_HH

#include <SDL/SDL.h>
#include "engine/basic/point2f.hh"
#include "engine/pawirr.hh"
#include "engine/moduleBase.hh"
#include "engine/key/keyList.hh"

class key{
public:
	key(int sdlkey, _keys pawirrkey);

	_keys pawirrkey;
	int sdlkey;
	bool status;

	key *next;
private:
};

/*!
 * @brief Moduł klawiatury
 */
class moduleKeyboard: public moduleBase {
public:
	/*!
	 * @brief Konstruktor
	 * @return Obiekt
	 */
	moduleKeyboard();

	void addKey(key *nk);

	/*!
	 * @brief Sprawdzenie statusu klawisza
	 * @param k Klawisz do sprawdzenia
	 * @return Stan klawisza
	 */
	bool isPressed(_keys k);

	/*!
	 * @brief Sprawdzenie statusu klawisza i jego wyłączenie.
	 * @param k Klawisz do sprawdzenia
	 * @return Stan klawisza
	 */
	bool isPressedC(_keys k);

	/*!
	 * @brief Sprawdzanie stanów klawiszy [do głównej pętli]
	 */
	void checkInput();

	/*!
	 * @brief położenie wskaźnika myszy. Ustawiane w funkcji checkInput()
	 */
	point2f mousePos;

private:
	/*!
	 * @brief Tablica stanów klawiszy inicjalizowana w moduleKeyboard
	 */
	//bool *keyboardStatusArray;

	/*!
	 * @brief translacja akcji na akcje SDLa
	 */
	//int keyboardSDLTranslation[k_EOK];

	std::list<key*> keyList;

};

#else
class moduleKeyboard;
#endif
